#生成10×10随机矩阵文件（空格分隔符），并转化为CSV（逗号分隔符）
import random    #导入随机数包
def MAKEELE(ELEN:'int'=0):      #定义一个生成矩阵元素ELEMENT的函数MAKEELE()
    ELEMENT = str(round(random.uniform(0,10**ELEN),2))    #矩阵元素转为STR以便于用JION()写入
    return ELEMENT
    
def MAKEMAT(YLEN:'int',XLEN:'int',ELEN:'int'):    #定义一个生成矩阵的函数MAKEMAT()
#参数XLEN、YLEN分别表示矩阵的行长度和列长度
    MAT = []    #声明二维列表MAT用来表示整个矩阵
    for LINE in range(XLEN):    #“行长度”其实是列数，反之“列长度”其实是行数，所以用
        THISLINE = []   #声明列表THISLINE用来表示矩阵的第LINE+1行
        for ELEMENT in range(YLEN) :    #对第LINE行的第ELEMENT+1个元素
            THISLINE.append(MAKEELE(ELEN))    #该元素为MAKEELE()造出来的元素，并加入THISLINE中
            #注意此处对列表THISLINE第ELEMENT+1个元素THISLINE[ELEMENT]赋值要采用APPENDE方法，不能采用‘=’赋值，
            #因为THISLINE一开始是一个空列表，你要赋值的THISLINE[ELEMENT]其实并不存在，无法赋值上去
        MAT.append(THISLINE)    #THISLINE收集够元素之后，MATA再把THISLINE装进去
        #注意MAT的append()语句要写在‘for LINE’语句内，否则无法及时装载每一个THISLINE
    return MAT

def WRITEMAT(MAT:'list'):    #定义一个生成10×10随机矩阵文件'MAT.TXT'（空格分隔符）的函数
    F = open('MAT.TXT','w',encoding = 'utf-8')    #注意'w'参数必不可少，否则无法创建新文件
    for ROW in MAT:
        F.write(' '.join(ROW)+'\n')    #用JION和连字符落实“空格词、换行分行”的要求
    F.close()

def TRANSFILE():    #定义一个将'MAT.TXT'转化为CSV（逗号分隔符）的函数
    F = open('MAT.TXT','r',encoding = 'utf-8')    #参数写'r'即可，因为不需要修改'MAT.TXT'
    NEWMAT = []    #声明列表NEWMAT用于获取'MAT.TXT'内的数据，不能作弊沿用刚才写'MAT.TXT'用的列表MAT
    for LINE in F:
        NEWMAT.append(LINE.strip('\n').split(' '))    #获取每一行的数据
    F.close()
    F = open('MAT.CSV','w',encoding = 'utf-8')    #创建一个'MAT.CSV'文件
    for ROW in NEWMAT:
        F.write(','.join(ROW)+'\n')    #数据之间JION()进逗号，行末补上换行符，满足CSV文件的格式
    F.close()

def MAIN():
    MAT = MAKEMAT(10,10,4)
    print('矩阵构造完毕！')    #用来提示工作进度
    WRITEMAT(MAT)
    print('矩阵写入完毕！')
    TRANSFILE()
    print('CSV文件创建完毕！')

MAIN()



